package com.hq.door.controller;

import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hq.door.dto.InstituteInfo;
import com.hq.door.dto.StudentInfo;
import com.hq.door.service.IOrgBackService;
import com.hq.door.service.StudentBackService;

/**
 * 后台学生管理模块控制器
 * @author Administrator
 * 
 */
@Controller
@RequestMapping("/StudentBack/")
public class StudentBackController {
	@Autowired
	private StudentBackService studentBackService;
	
	@Autowired
	private IOrgBackService orgBackService;
	
	/**
	 * 测试方法
	 * @param req
	 * @return
	 */
	@RequestMapping("/getByStudentId")
	@ResponseBody
	public StudentInfo getByStudentId(HttpServletRequest req) {

		StudentInfo studentInfo = null;
		if (req.getParameter("id") != null) {
			int id = Integer.parseInt(req.getParameter("id"));
			studentInfo = studentBackService.getStudentInfo(id);
			return studentInfo;
		}

		return studentInfo;

	}
	
	/**
	 * 获取单个学生信息
	 * @param code
	 * 学号
	 * @return
	 * 返回一个学生信息dto对象
	 */
	@RequestMapping("/getOneStu")
	@ResponseBody
	public Object getOneStu(
			@RequestParam(value = "code", required = true) String code) {

		StudentInfo studentInfo = null;

		studentInfo = studentBackService.getOneStu(code);
		
		return studentInfo;
	}
	
	/**
	 * 以分页方式获取学生信息
	 * @param type
	 * 查询类型（必须）
	 * 0 代表无条件查询
	 * 1代表学号模糊查询
	 * 2代表姓名模糊查询（姓名可以是家长或者学生姓名）
	 * 3 代表按学院查询
	 * 4 代表按专业查询
	 * 5 代表按年级查询
	 * 6 代表按班级查询
	 * 7 代表按学号精确查询（此时不可以计数方式查询）
	 * @param para
	 * 查询条件的值（可选）
	 * 当type为0时，不需要
	 * 当type不为0时，需要
	 * @param pageSize
	 * 每页大小（可选）
	 * 当pageSize和pageStart都有值时，执行查询信息方法
	 * 当pageSize或pageStart为null时，执行计数方法
	 * @param pageStart
	 * 当前页（可选）
	 * @return
	 * 执行查询信息方法时，返回一个学生信息dto的list对象
	 * 执行计数方法时，返回int型总数
	 */
	@RequestMapping("/getByPage")
	@ResponseBody
	public Object getByPage(
			@RequestParam(value = "type", required = false) Integer type,
			@RequestParam(value = "para", required = true) String []para,
			@RequestParam(value = "pageSize", required = false) Integer pageSize,
			@RequestParam(value = "pageStart", required = false) Integer pageStart) {

		List<StudentInfo> studentInfos = null;

		if (pageSize != null && pageStart != null) {
			studentInfos = studentBackService.getByPage(type, para, pageStart,pageSize);
		} else {
			return studentBackService.getCount(type, para);
		}
		return studentInfos;

	}

	/**
	 * 更新或添加学生信息
	 * @param studentInfo
	 * 页面post的学生信息
	 * @return
	 * 返回结果
	 * -1代表添加失败
	 * 0代表修改成功
	 * 1代表添加成功
	 */
	@RequestMapping(value = "/updateInfo", method = RequestMethod.POST)
	@ResponseBody
	public int updateInfo(@RequestBody StudentInfo studentInfo) {

		int res = studentBackService.updateInfo(studentInfo);

		return res;
	}
	
	/**
	 * 更新学生密码
	 * @param code
	 * @param possWord
	 * 页面post的学生的学号，和修改的密码
	 * @return
	 * 返回结果
	 * -1代表添加失败
	 * 0代表修改成功
	 * 1代表添加成功
	 */
	@RequestMapping(value = "/updateStuPossword", method = RequestMethod.POST)
	@ResponseBody
	public int updateStuPossWord(@RequestParam(value = "code", required = true) String code,
			@RequestParam(value = "possWord", required = true) String possWord) {

		int res = studentBackService.updateStuPossWord(code,possWord);

		return res;
	}
	
	/**
	 * 删除单个学生
	 * @param code
	 * 学号
	 * @return
	 * 1代表成功
	 * 0代表找不到学号，失败
	 */
	@RequestMapping("/delStudent")
	@ResponseBody
	public int delStudent(@RequestParam(value = "code", required = true) String code) {

		int res = studentBackService.delStudent(code);

		return res;
	}
	
	/**
	 * 批量删除学生
	 * @param codes
	 * 学生学号的list
	 * @return
	 * 删除的学生条数
	 */
	@RequestMapping("/delBatchStudent")
	@ResponseBody
	public int delBatchStudent(@RequestParam(value = "codes", required = true) String[] codes) {

		int res = studentBackService.delBatchStudent(codes);

		return res;
	}
	
	/**
	 * 获取学校信息
	 * @return
	 * 返回学院信息的list
	 */
	@RequestMapping("/getOrg")
	@ResponseBody
	public List<InstituteInfo> getOrg() {

		List<InstituteInfo> instituteInfos = null;

		instituteInfos = orgBackService.getOrg();

		return instituteInfos;
	}

}
